In circuit switched environments, synchronization between connected devices is inherent to the underlying architecture. In particular, a dedicated talk and listen path is established between two end points, and data is exchanged in accordance with a single clock. The frequency of this clock may be communicated to connected devices using a dedicated clocking tree, in which a hierarchy of clocking devices is ultimately synchronized to the global positioning system, a highly accurate standalone clock, or some other external clock. However, communication endpoints on a packet-switched network, such as Voice over Internet protocol (VoIP) endpoints are considered connectionless because dedicated talk and listen paths are not established between the endpoints. Instead, data associated with a communication over an Internet protocol network is sent using packets that can traverse different paths between the two endpoints. Accordingly, the delay experienced by different packets can vary.
If the clocks on the endpoints to a communication session are not synchronized to one another, then one side may send more data packets then it is receiving. That is, each endpoint will take data from received packets at a rate determined by that endpoint's own clock. A receiving endpoint having a clock rate that is slower then a sending endpoint can therefore receive data packets more quickly than it processes them for playback. This can eventually result in data loss if the FIFO buffer of the receiving device overflows. For voice communication or other types of communication that rely heavily upon synchronization, such as modems and faxes, this variability can be detrimental to the endpoint's ability to operate within a tolerance level that is acceptable. Accordingly, it would be desirable to provide for the synchronization of clocks running on endpoints in communication with one another across an Internet protocol or other data packet network.
In order to synchronize the clocks on interconnected endpoints, systems have been developed that send data packets containing time stamps between the endpoints. This allows each endpoint to derive a clock that is, on average, the same frequency as the other side. In a typical implementation, the rate at which time stamps are sent is relatively slow. For example, time packets may be sent every few seconds. Furthermore, the time needed to lock the clock generator on one side of a communication session to the other is long. For example, hundreds of seconds are commonly required in order to establish clock frequencies on the interconnected devices that are on the average the same.